﻿#pragma once
#include "DSP.h"
#include "array/Array.hpp"
#include "array/Array.hpp"

namespace yzrilyzr_dsp{
	EBCLASS(PCM){
	public:
	static float insert(float a, float b);
	static float ft(float al, yzrilyzr_array::FloatArray & y, float yoff);
	static yzrilyzr_array::FloatArray * mono_8Bit_PCM(yzrilyzr_array::ByteArray & data);
	static yzrilyzr_array::ByteArray * mono_PCM_8Bit(yzrilyzr_array::FloatArray & data);
	static yzrilyzr_array::FloatArray ** stereo_8Bit_PCM(yzrilyzr_array::ByteArray & data);
	static yzrilyzr_array::ByteArray * stereo_PCM_8Bit(yzrilyzr_array::FloatArray & l, yzrilyzr_array::FloatArray & r);
	static yzrilyzr_array::FloatArray * gain(yzrilyzr_array::FloatArray & src, float gain);
	static u_sample getTHD(yzrilyzr_array::DoubleArray & vdB);
	static yzrilyzr_array::FloatArray * mono_16Bit_PCM(yzrilyzr_array::ByteArray & data);
	static yzrilyzr_array::ByteArray * mono_PCM_16Bit(yzrilyzr_array::FloatArray & left);
	static yzrilyzr_array::FloatArray ** stereo_16Bit_PCM(yzrilyzr_array::ByteArray & data);
	static yzrilyzr_array::ByteArray * stereo_PCM_16Bit(yzrilyzr_array::FloatArray & left, yzrilyzr_array::FloatArray & right);
	static yzrilyzr_array::FloatArray * mix(yzrilyzr_array::Array<yzrilyzr_array::FloatArray *> &a);
	static yzrilyzr_array::FloatArray * reverse(yzrilyzr_array::FloatArray & a);
	static yzrilyzr_array::FloatArray * convertSampleRate(yzrilyzr_array::FloatArray & a, u_sample_rate sr);
	};
}